import http from 'wx-https'

http.baseURL = "https://live-api.itheima.net"

// const obj = {
//   a: 1,
//   b: 2
// }
// const newObj = Object.assign({}, obj, {
//   c: 3,
//   d: 4,
//   e: 5
// })
// const newObj2 = Object.assign(obj, {
//   c: 3,
//   d: 4,
//   e: 5
// })
// === 复杂数据类型比较的（地址）和类型
// === 简单数据类型，比较的就是 值 和 类型  
// console.log(obj === newObj); // false
// console.log(obj === newObj2); // true
// const o1 = {}
// const o2 = Object.assign({}, o1, {
//   a: 1,
//   b: 2
// })
// console.log(o1 === o2);
// const num1 = 10  
// const num2 = '10'
// console.log(num1 == num2);

// 响应拦截器，他的写法，一般是看官方网站
http.intercept.response = async ({
  data,
  statusCode,
  config
}) => {
  console.log('请求的url：', config.url);
  if (statusCode === 401) {
    // 在这个if分支里面 token就是过期， 刷新token， refreshToken也可能过期，会执行到这个401的分支里面来
    // if(如果下面的情况是refreshToken过期了，就要在这个if分支里面，给他强行跳转回首页) {}
    if (config.url.includes('refreshToken')) {
      // 跳转回首页，不要执行下面的代码了
      // 进入了这个if语句，就表示是refreshToken这个值也失效了，我们就不能再无感刷新了
      // 需要告诉用户，去首页重新使用账号和密码登录
      const pages = getCurrentPages();
      const currentPage = pages[pages.length - 1]
      return wx.redirectTo({
        url: `/pages/login/index?redirectUrl=/${currentPage.route}`,
      })
    }

    // 就需要使用 刷新token 去发请求，获取新的token
    const res = await http({
      url: wx.$http.baseURL + '/refreshToken',
      method: 'POST',
      header: {
        Authorization: getApp().refreshToken
      }
    })
    getApp().setToken(res.data.token, res.data.refreshToken)

    // 如果获取了新的token值以后，应该吧之前的token失效的请求在发一遍
    http(Object.assign(config, {
      header: {
        Authorization: getApp().token
      }
    }))
  }
  // 如果下面这句话不写，那么在前面发请求的地方，得到的值就是 undeifned
  return data
}

// 请求拦截器 A
http.intercept.request = (config) => {
  const defaultConfig = {
    Authorization: getApp().token,
    // 其他同事添加自己的配置，就可以在这里加，不用去给 config 通用的对象添加
    // 在我写代码的时候，有时会考虑一些代码的扩展性，为后面项目的迭代升级做准备
  }
  config.header = Object.assign({}, defaultConfig, config.header)
  return config
}

// 给这个全局 wx添加一个属性
wx.$http = http

// 做一个默认导出的功能
export default http